% !Mode:: "TeX:UTF-8"

\chapter{测试}

\section{引言}

\subsection{编写目的}
编写此报告的目的是为了通过测试依据设计报告设计出的软件以及软件运行的环境，从而找出软件的缺陷并进行改进。

\subsection{术语和缩略语}
\begin{enumerate}
    \item 质量管理体系国家标准理解与实施(2008 版)
    \item [2]ISO 9001 质量体系——设计、开发、生产、安装和服务的
    \item 软件工程（原书第 9 版）. 机械工业出版社:2011.5
\end{enumerate}

\section{测试需求分析}
\subsection{测试策略}
测试重点
\begin{enumerate}
    \item 本测试文档主要进行硬件的测试，网络测试，以及对app主要模块的测试。
    \item 基于此系统的特征，本测试报告的重点在于关注所有被测试模块的逻辑正确性，以及对于数据存储正确性，一致性的测试 
\end{enumerate}

测试方法
\begin{enumerate}
    \item 首先对硬件进行功能测试、性能测试等。
    \item 然后对app进行测试。
    \item 最后对网络，数据恢复能力，数据安全性进行测试。
\end{enumerate}

\subsection{测试范围}
\subsubsection{测试广度}
测试相关类型的了解。具体包括如下：需求分析、测试流程、测试管理、开发流程、开发技术、测试模型、基础测试方法和测试技术、功能测试、性能测试、可 靠性测试、易用性测试、稳定性测试，兼容性测试。 
\subsubsection{测试深度}
在同一个测试步骤阶段运用多种手段全方位进行测试。

\subsection{测试环境}
软件环境：Windos10、Android9、Arduino1.8.13\\
硬件环境：CPU：Intel®Core™、CPU 2.30GHz stepping 01 Memory:8GB\\
网络环境：100M LAN

\section{计划测试过程}
\subsection{初步静态测试}
对代码进行静态的核查，考察文档和程序的一致性，确保文档中的功能点，程序中都有实现。对不合规范的变量名、函数名进行整改。对明显冗余的代码段进行删减。对部分代码段进行结构性优化。采用程序数据流监控法。

\subsection{单元测试}
主要测试了app的测温模块、数据保存模块、生成数据曲线模块、温度超常警告模块。

\subsubsection{测温模块}
首先进行静态的逻辑分析，确保程序逻辑正确。采用黑盒测试和动态测试法，充分利用等价分类法和边界检查法，输入典型的测试用例，覆盖绝大多数常用逻辑路径，以判断模块的代码逻辑和功能的正确性和可靠性。
\begin{table}[H]
    \caption{测温模块测试表}\label{tab:TempTest}
    \vspace{0.5em}\wuhao
    \begin{tabularx}{\textwidth}{llX}
    \toprule[1.5pt]
    输入/动作 & 期望的输出/相应 & 实际情况\\\midrule[1pt]
    进行正确请求 & 测温成功 & 测温成功\\
    进行测温请求 & 测温失败 & 测温失败\\
    进行不符合格式的请求 & 测温失败 & 测温失败，返回“不正确的格式”异常\\\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
\end{table}


\subsubsection{数据保存模块}
首先进行静态的逻辑分析，确保程序逻辑正确。采用黑盒测试和动态测试法，充分利用等价分类法和边界检查法，输入典型的测试用例，覆盖绝大多数常用逻辑路径，以判断模块的代码逻辑和功能的正确性和可靠性。
\begin{table}[H]
    \caption{数据保存测试表}\label{tab:DataTest}
    \vspace{0.5em}\wuhao
    \begin{tabularx}{\textwidth}{llX}
    \toprule[1.5pt]
    输入/动作 & 期望的输出/相应 & 实际情况\\\midrule[1pt]
    导入正确数据 & 保存数据成功 & 保存数据成功\\
    导入错误数据 & 保存数据失败 & 保存数据失败\\
    导入不规范数据 & 保存数据失败 & 保存数据失败，返回“不规范的数据”异常\\\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
\end{table}

\subsubsection{生成数据曲线模块}
首先进行静态的逻辑分析，确保程序逻辑正确。采用黑盒测试和动态测试法，充分利用等价分类法和边界检查法，输入典型的测试用例，覆盖绝大多数常用逻辑路径，以判断模块的代码逻辑和功能的正确性和可靠性。
\begin{table}[H]
    \caption{测温模块测试表}\label{tab:CurveTest}
    \vspace{0.5em}\wuhao
    \begin{tabularx}{\textwidth}{llX}
    \toprule[1.5pt]
    输入/动作 & 期望的输出/相应 & 实际情况\\\midrule[1pt]
    导入完整数据 & 生成数据曲线成功 & 生成数据曲线成功\\
    导入不完整数据 & 生成数据曲线失败 & 保生成数据曲线失败\\
    导入格式不符合的数据 & 生成数据曲线失败 & 生成数据曲线失败，返回“不正确格式的数据”异常\\\bottomrule[1.5pt]
    \end{tabularx}
    \vspace{\baselineskip}
\end{table}

\subsubsection{温度超常警报模块}
首先进行静态的逻辑分析，确保程序逻辑正确。采用黑盒测试和动态测试法，充分利用等价分类法和边界检查法，输入典型的测试用例，覆盖绝大多数常用逻辑路径，以判断模块的代码逻辑和功能的正确性和可靠性。

\subsubsection{测试用例的设置方法}
\begin{enumerate}
    \item 根据程序的逻辑结构画出模块流程图：
    \begin{figure}[H]
        \centering
        \includegraphics[width=1\textwidth]{figures/FlowChart}
        \caption{流程图}\label{fig:FlowChart}
        \vspace{\baselineskip} % 表示图与正文空一行
      \end{figure}
    \item 依次标号：
    查看温度是否正常：1
    检查是警告区域还是报警区域：2
    界面显示橙色：3
    界面显示红色：4
    向用户发出警报：5
    测温结束：6
    \item 根据流程图画出流图：
    \begin{figure}[H]
        \centering
        \includegraphics[width=1\textwidth]{figures/flow}
        \caption{流图}\label{fig:flow}
        \vspace{\baselineskip} % 表示图与正文空一行
      \end{figure}
    \item 确定基本路径的集合：
         \begin{enumerate}
             \item 1 6
             \item 1 2 3 5 6
             \item 1 2 4 5 6 
         \end{enumerate}
    \item 对每条基本路径设计测试用例：
    \begin{table}[H]
        \caption{每条路径的测试用例}\label{tab:TestCase}
        \vspace{0.5em}\wuhao
        \begin{tabular}{ccccccc}
        \toprule[1.5pt]
        序号 & 基本路径 & 测试用例 & 结课\\\midrule[1pt]
        1 & 16 & 温度正常 & 不发出警报\\
        2 & 12356 & 温度不正常且处于警告区域 & 发出警报、界面显示橙色\\
        3 & 12456 & 温度不正常且处于警告区域 & 发出警报、界面显示红色\\\bottomrule[1.5pt]
        \end{tabular}
        \vspace{\baselineskip}
    \end{table}    
\end{enumerate}

\subsection{组装测试}
采取自顶向下的集成方式，从主控模块开始,按照软件的控制层次结构,以深度优先策略, 逐步把各个模块集成在一起。
按设计要求把通过单元测试的几个模块组装在一起，测试各模块之间的连接组合功能是否按照需求完成，以便发现与接口有有关的各种错误。

\subsubsection{桩模块设计}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/StubTest}
    \caption{桩模块设计}\label{fig:StubTest}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\subsubsection{步骤}
\begin{enumerate}
    \item 以主控模块作为测试驱动模块,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代;
    \item 依据深度优先的集成策略,每次只替代一个桩模块;
    \item 每集成一个模块立即测试一遍; 
    \item 每组测试完成后,着手替换下一个桩模块; 
    \item 为避免引入新错误,须不断进行回归测试(即全部或部分地重复已做过的测试)。
    \item 从第二步开始,循环执行上述步骤,直至整个程序结构构造完毕。
\end{enumerate}

\subsection{确认测试}
确认测试检查该系统能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。测试过程则定义了一些特殊的测试用例,旨在说明软件满足以下需求：
\begin{enumerate}
    \item 测温：用户可以看到人体温度和环境温度。
    \item 数据保存：在测量时，系统温度数据、测量地点以及时间对应保存。
    \item 生成数据曲线：用户可以查看系统自动生成的实时、历史体温测量数据曲线。
    \item 用户可以查看实时、历史体温测量的显示，当前值、最大值、最小值。
    \item 报警：系统拥有正常区域、警告区域、报警区域的三级极限值设定。当测量温度为警告温度区域时，界面显示橙色。处于报警区域时，界面显示红色。当温度超过正常区域时，用户会收到警报。
\end{enumerate}

\subsubsection{功能需求测试}
\begin{enumerate}
    \item 进行有效性测试（黑盒测试）:
    
    有效性测试是在模拟的环境（可能是就是开发的环境）下，运用黑盒测试的方法，验证所测试件是否满足需求规格说明书列出的需求。首先制定测试计划，规定要做测试的种类，还需要制定一组测试步骤，描述具体的测试用例。通过实施预定的测试计划和测试步骤，确定软件的特性是否与需求相符，确保所有的软件功能需求都能得到满足，所有的软件性能需求能达到，所有的文档都是正确且便于使用。
    \begin{table}[H]
        \caption{测试步骤（从上到下依次进行）}\label{tab:TestCase}
        \vspace{0.5em}\wuhao
        \begin{tabularx}{\textwidth}{llX}
        \toprule[1.5pt]
        测试用例 & 结果\\\midrule[1pt]
        测温 & 成功测温\\
        数据保存 & 成功保存数据\\
        生成实时、历史体温 & 成功生成\\
        生成数据曲线 & 成功生成数据曲线\\
        生成当前值、最大值、最小值体温 & 成功生成\\
        警告区域 & 界面显示橙色\\
        报警区域 & 界面显示红色\\
        发出警报 & 用户成功收到警报\\\bottomrule[1.5pt]
        \end{tabularx}
        \vspace{\baselineskip}
    \end{table}
    \item 软件配置审查
    在确认测试的过程，应当严格遵守用户手册和操作手册中规定的使用步骤，仔细记录发现的遗漏和错误，并且适当地补充和改正。
\end{enumerate}

\subsubsection{性能需求测试}
\begin{enumerate}
    \item 数据精确度：开发板中读取到的温度的精度为到小数点后两位，对系统进行黑盒测试，结果为在app中可以显示相同的两位小数。
    \begin{table}[H]
        \caption{测试结果}\label{tab:Test}
        \vspace{0.5em}\wuhao
        \begin{tabularx}{\textwidth}{llX}
        \toprule[1.5pt]
        串口监视器 & app\\\midrule[1pt]
        40.00 & 40.00\\
        23.59 & 23.59\\
        33.31 & 33.31\\\bottomrule[1.5pt]
        \end{tabularx}
        \vspace{\baselineskip}
    \end{table}
    \item 时间特性：经过多次测量，从开发板的温度发生改变到阿里云服务器+app的数据改变约为1s，响应时间在可接受范围内.
    \item 可靠性：将硬件，阿里云，Java后台以及手机app持续运行一天，没有发生任何问题
    用户使用终端。
\end{enumerate}

\subsection{系统测试}
\subsubsection{用户使用终端}
\begin{enumerate}
    \item 功能测试：app可以正确显示出得到的温度，个人所在的位置，以及绘制温度折线图。
    \item 性能测试：app长期运行过程中（1天）没有发生任何闪退或者接收不到数据的情况。

\end{enumerate}

\subsubsection{应用服务器测试}
我们首先访问本机ip地址:8800端口，发现可以成功获取到数据，之后运行Java后台，并将后台与app连接到同一局域网中，其结果所有的app都能获取到正确的数据
        \begin{table}[H]
            \caption{应用服务器测试结果}\label{tab:TestResult}
            \vspace{0.5em}\wuhao
            \begin{tabularx}{\textwidth}{llX}
            \toprule[1.5pt]
            串口监视器 & Java后台 & App\\\midrule[1pt]
            27.33 & 27.33 & 27.33\\
            26.08 & 26.08 & 26.03\\
            39.07 & 390.7 & 39.07\\\bottomrule[1.5pt]
            \end{tabularx}
            \vspace{\baselineskip}
        \end{table}
         
        服务器的安全测试无法进行，因为使用的是阿里云的服务，本机的后台没有开放除了和阿里云连接的其他任何端口，理论上不会被劫持。
        
        服务器的数据都存储在阿里云上，使用其备份与存储功能，无需我们担心其完整性和可靠性.